﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using BussinessLogicTecnoPez.Seguridad_Tecnopez;
using Microsoft.Practices.EnterpriseLibrary.Validation;

public partial class cambioPassword : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        GenericMasterPage master = (GenericMasterPage)this.Master;
        master.Imagen = "../Styles/Icons/login.png";
        master.Titulo = "Cambio de Contraseña";

        if (this.Page.IsPostBack == false)
            cargarDatosUsuario();
    }

    private void cargarDatosUsuario()
    {
        string userName = this.Page.User.Identity.Name;

        if (!string.IsNullOrEmpty(userName))
        {
            Usuario objUser = new Usuario();
            Usuario.getManager.ClearFilters();
            Usuario.getManager.AddFilter("Nombre", BussinessLogicTecnoPez.GenericManager<Usuario>.filterOperator.Equals, userName);

            objUser = Usuario.getManager.GetOne();

            if (objUser.Empleado != null)
                this.txtEmpleado.Text = objUser.Empleado.ToString();

            if (objUser.Rol != null)
                this.txtRol.Text = objUser.Rol.ToString();

            this.txtUser.Text = objUser.Nombre;
            this.txtContraseniaAnterior.Text = objUser.Contrasenia;
            
            this.cmdAceptar.Enabled = true;
        }
        else
        {
            this.cmdAceptar.Enabled = false;
        }
    }
    protected void cmdAceptar_Click(object sender, EventArgs e)
    {
        if (this.txtContraseniaAnterior.Text == string.Empty || this.txtContraseniaNueva.Text == string.Empty || this.txtConfirmaContrasenia.Text == string.Empty)
        {
            lblMensaje.Text = "Debe ingresar todos los datos.";
            return;
        }

        Usuario objUser;
        string userName = this.Page.User.Identity.Name;

        if (this.txtContraseniaAnterior.Text == string.Empty)
        {
            lblMensaje.Text = "Debe ingresar la contraseña actual.";
            return;
        }
        else
        {
            Usuario.getManager.ClearFilters();
            Usuario.getManager.AddFilter("Nombre", BussinessLogicTecnoPez.GenericManager<Usuario>.filterOperator.Equals, userName);

            objUser = Usuario.getManager.GetOne();

            if (objUser == null)
            {
                lblMensaje.Text = "Error inesperado. Usuario inexistente.";
                return;
            }
            else
            {
                if (objUser.Contrasenia != this.txtContraseniaAnterior.Text)
                {
                    lblMensaje.Text = "La contraseña ingresada no corresponde con la contraseña actual.";
                    return;
                }
            }
        }
        if (this.txtContraseniaNueva.Text == this.txtConfirmaContrasenia.Text)
        {
            if (this.txtContraseniaNueva.Text.Length >= 5 && this.txtContraseniaNueva.Text.Length <= 200)
            {
                //modifico contraseña en la base de datos.
                objUser.Contrasenia = this.txtContraseniaNueva.Text;

                if (Usuario.getManager.Update(objUser))
                {
                    lblMensaje.Text = "La contraseña ha sido modificada.";
                    return;
                }
                else
                {
                    lblMensaje.Text = "No se ha podido modificar la contraseña. Error:" + Usuario.getManager.GeneratedException.Message;
                    return;
                }
            }
            else
            {
                lblMensaje.Text = "La contraseña debe contener entre 5 y 20 caracteres.";
                return;
            }
        }
        else
        {
            lblMensaje.Text = "La nueva contraseña y la confirmación deben ser iguales.";
            return;
        }
    }
}
